<?php

/**
 * Controller base para seção de administração
 *
 * @link http://www.hufersil.com.br
 *
 */
class AdminController extends MY_Controller {

    /**
     * Caminhos que os usuários poderão acessar sem a necessidade
     * de estarem autenticados.
     *
     * Cada caminho é uma entrada no array em forma de expressão regular.
     * O mostrado abaixo dá acesso sem necessidade de autenticação
     * a qualquer método da controller "login"
     *
     * @var array
     */
    protected $allowedPaths = array(
        '^admin/login/.*?'
    );

    /**
     * Contrutor
     */
    public function __construct(){
        // chamamos o construtor "pai"
        parent::__construct();
        date_default_timezone_set("America/Sao_Paulo");

        // indicamos o arquivo de layout da área de administração
        $this->layoutFile = 'admin/template.php';

        // verifica se a permissão do usuário de acessar a URL indicada
        $this->verificarPermissao();
        
        // carrega a biblioteca de paginação
        $this->load->library('pagination');

        // fazemos um hook para formularios de pesquisa
        $this->hookFormularioPesquisa();

        // ja colocamos os dados do usuario da sessão para
        // podermos renderizar nos templates
        $this->assign('_usuario', $this->getUsuarioSessao());
    }

    /**
     * Recupera os dados do usuário logado
     *
     * @return array
     */
    protected function getUsuarioSessao(){
        return empty($_SESSION['usuario']) ? null : $_SESSION['usuario'];
    }

    /**
     * Verifica a permissão de acesso do usuário.
     *
     */
    protected function verificarPermissao(){
        $user = $this->getUsuarioSessao();
        $uri = $this->uri->uri_string();

        // se não está logado e esta acessando uma URL não permitida.
        if(empty($user) && !preg_match('@' . implode('|', $this->allowedPaths) . '@', $uri)){
            // limpa a sessão
            $_SESSION = array();
            // envia para tela de login
            redirect('admin/login/index/sem_permissao');
        }
    }
    
    /**
     * Grava os dados da pesquisa realizada.
     *
     * <p>Ao realizar uma pesquisa, gravamos quais foram os dados
     * enviados pelo usuário na sessão, para quando ele voltar
     * na tela de pesquisa os dados continuem lá.</p>
     *
     * <p>Para funcionar corretamente, o nome do método que realiza
     * a consulta deve ser sempre o método "index" da controller</p>.
     *
     * <p>Ao acessar uma controller diferente, limpamos os dados anteriores</p>
     *
     */
    protected function hookFormularioPesquisa(){
        // pega  o nome da controller anterior e atual
        $ctrlAnterior = empty($_SESSION['_ctrl']) ? null : $_SESSION['_ctrl'];
        $ctrlAtual    = $this->uri->segment(2);

        // se enviou uma solicitação via POST e foi pelo metodo index
        if($_SERVER['REQUEST_METHOD'] == 'POST' && strpos($this->uri->uri_string(), '/index') !== false){
            $_SESSION['_busca'] = $_POST;
            $_SESSION['_ctrl'] = $ctrlAtual;
            return;
        }

        // se não for a mesma controller
        if($ctrlAnterior != $ctrlAtual){
            // limpamos os dados
            unset($_SESSION['_busca'], $_SESSION['_ctrl']);
            return;
        }

        // se tem dados de busca e for o metodo index
        if(!empty($_SESSION['_busca']) && $this->uri->segment(3) == 'index'){
            $_POST = $_SESSION['_busca'];
        }
    }
    
    function getUltimoId( $tabela ) {
        $id_tabela = $this->getIdTabela( $tabela );
        $sql = "
            SELECT MAX( $id_tabela ) AS ultimo_id
            FROM $tabela
        ";
        echo $sql; exit;
        $stmt = $this->doctrine->em->getConnection()->prepare( $sql );
        $stmt->execute();
        echoVarDump( $stmt->fetchAll() );exit;
        return $stmt->fetchAll();
    }

    private function getIdTabela( $tabela ) {
        $split = explode( "_" , $tabela );
        $id_tabela = "id_";
        $primeira = true;
        for( $index = 0; $index < count( $split ); $index++ ) {
            if( $primeira ) {
                $primeira = false;
            } else {
                $id_tabela .= "_";
            }
            $valor = $split[$index];
            $tamanho = strlen( $valor );
            $ultima_letra = substr( $valor, -1 );
            if( $ultima_letra == "s" ) {
                //vamos colocar no singular, pois o nome do id é singular
                $id_tabela .= substr( $valor, 0, ( $tamanho - 1 ) );
            } else {
                $id_tabela .= $valor;
            }
        }
        return $id_tabela;
    }
}

?>